public class test {
   /* 反转链表
    给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
    输入：head = [1,2]
    输出：[2,1]
    示例 3：

    输入：head = []
    输出：[]
    class Solution {
        public ListNode reverseList(ListNode head) {
            if(head == null){
                return null ;}
            if(head.next == null){
                return head;}
            ListNode cur = head.next;
            head.next = null;
            while(cur != null){
                ListNode curNext = cur.next;
                cur. next = head;
                head = cur;
                cur = curNext;
            }
            return head;
        }
    }
    删除链表中所有值为value的元素
    输入：head = [1,2,6,3,4,5,6], val = 6
输出：[1,2,3,4,5]
示例 2：

输入：head = [], val = 1
输出：[]
示例 3：

输入：head = [7,7,7,7], val = 7
输出：[]




    class Solution {
        public ListNode removeElements(ListNode head, int val) {
            if(head == null) {
                return null;
            }
            ListNode prev = head;
            ListNode tmep = prev;
            ListNode cur = head.next;

            while (cur != null) {
                if(cur.val == val) {
                    tmep.next = cur.next;
                    cur = cur.next;
                }else {
                    tmep = cur;
                    cur = cur.next;
                }
            }
            //除了头节点都删除完成了
            if(prev.val == val) {
                prev = prev.next;
            }
            return  prev;
        }
    }

获取链表的中间节点
输入：head = [1,2,3,4,5,6]
输出：[4,5,6]
解释：该链表有两个中间结点，值分别为 3 和 4 ，返回第二个结点。

class Solution {
    public ListNode middleNode(ListNode head) {
     ListNode fast = head;
     ListNode slow = head;
     while(fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
         }
         return slow;
     }

 }
获取链表倒数第K个节点
输入一个链表，输出该链表中倒数第k个结点。
示例1
输入：
1,{1,2,3,4,5}
返回值：
{5}
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
         if(k <= 0){
            return null;
         }
         if(head == null){
            return null;
         }
         ListNode fast = head;
         ListNode slow = head;
         int count = 0;
         while(count != k-1){
            if(fast.next != null){
                fast = fast.next;
            count++;
            }else{
                return null;
            }
         }
         while(fast.next != null){
            fast = fast.next;
            slow = slow.next;
         }


       return slow;

    }
}
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入：l1 = [1,2,4], l2 = [1,3,4]
输出：[1,1,2,3,4,4]
示例 2：

输入：l1 = [], l2 = []
输出：[]
示例 3：

输入：l1 = [], l2 = [0]
输出：[0]
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
         ListNode newhead = new ListNode(-1);
         ListNode tmp = newhead;
         while(list1 != null && list2 != null){
             if(list1.val < list2.val){
                 tmp.next = list1;
                 list1 = list1.next;
                 tmp = tmp.next;
             }else{
                 tmp.next = list2;
                 list2 = list2.next;
                 tmp = tmp.next;
             }
         }
         if(list1 != null){
             tmp.next = list1;
         }
         if(list2 != null){
             tmp.next = list2;
         }
       return newhead.next;
    }
}




*/


}
